home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / ctlmod / setp.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-09-18  |  1.7 KB  |  104 lines

  1. # include    "ctlmod.h"
  2. # include    <ingres.h>
  3. # include    <tree.h>
  4. # include    <aux.h>
  5. # include    <sccs.h>
  6.  
  7. SCCSID(@(#)setp.c    8.1    12/31/84)
  8.  
  9. /*
  10. **  SETP -- set parameter
  11. **
  12. **    Sets a parameter, to be later sent by 'call' to whomever.
  13. **
  14. **    Parameters:
  15. **        type -- parameter type.
  16. **            PV_STRING -- a string, 'len' is ignored.
  17. **            PV_TUPLE -- a tuple of length 'len'.
  18. **            PV_QTREE -- a query tree pointer, 'len'
  19. **                is ignored.
  20. **            PV_INT -- an integer, 'len' is ignored.
  21. **        val -- the value (real value if PV_INT, pointer
  22. **            otherwise).
  23. **        len -- the length of the tuple in PV_TUPLE mode.
  24. **
  25. **    Returns:
  26. **        none
  27. **
  28. **    Side Effects:
  29. **        Adjusts Ctx.ctx_pc & Ctx.ctx_pv.
  30. **
  31. **    Trace Flags:
  32. **        4.8 - 4.15
  33. */
  34.  
  35. setp(type, val, len)
  36. register int    type;
  37. char        *val;
  38. register int    len;
  39. {
  40.     register PARM    *pp;
  41.     register char    *newp;
  42.     extern char    *need();
  43.  
  44.     /*
  45.     **  Check the magic bounds.
  46.     */
  47.  
  48.     if (!Ctx.ctx_init)
  49. /*
  50.         pp = &Resp.resp_rval;
  51. */        syserr("setp: no initp");
  52.     else if (Ctx.ctx_pc >= PV_MAXPC)
  53.         syserr("setp: overflow");
  54.     else
  55.         pp = &Ctx.ctx_pv[Ctx.ctx_pc++];
  56.  
  57.     /*
  58.     **  Figure out the length from the type.
  59.     */
  60.  
  61.     switch (type)
  62.     {
  63.       case PV_STR:
  64.         len = length(val) + 1;
  65.         newp = need(Qbuf, len);
  66.         bmove(val, newp, len);
  67.         pp->pv_val.pv_str = newp;
  68.         break;
  69.     
  70.       case PV_TUPLE:
  71.         pp->pv_val.pv_tuple = (char *) val;
  72.         break;
  73.     
  74.       case PV_QTREE:
  75.         len = sizeof pp->pv_val.pv_qtree;
  76.         pp->pv_val.pv_qtree = (QTREE *) val;
  77.         break;
  78.  
  79.       case PV_INT:
  80.         len = sizeof (short);
  81.         pp->pv_val.pv_int = (short) val;
  82.         break;
  83.  
  84.     
  85.       default:
  86.         syserr("setp: type %d", type);
  87.     }
  88.  
  89.     /*
  90.     **  Set up the parameter.
  91.     */
  92.  
  93.     pp->pv_type = type;
  94.     pp->pv_len = len;
  95.  
  96. # ifdef xCTR1
  97.     if (tTf(4, 8))
  98.     {
  99.         lprintf("setp: ");
  100.         pr_parm(pp);
  101.     }
  102. # endif
  103. }
  104.